// pages/enrollment/online-apply.js
const app = getApp();
const http = require('../../utils/http');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 学院列表
    colleges: [],
    collegeIndex: -1,
    
    // 专业列表
    majors: [],
    majorIndex: -1,
    
    // 学历类型
    educationTypes: ['高中', '中专', '职高', '技校', '其他'],
    educationIndex: 0,
    
    // 表单数据
    formData: {
      name: '',
      gender: '男',
      idCard: '',
      phone: '',
      email: '',
      region: ['山东省', '济南市', '市中区'],
      school: '',
      education: '高中',
      graduationYear: '2024',
      collegeId: null,
      majorId: null,
      remark: '',
      privacyAgreed: false
    },
    
    // 表单验证错误信息
    errors: {},
    
    // 是否显示成功弹窗
    showSuccessModal: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('在线报名页面加载，接收到的参数:', options);
    
    // 如果有传入的学院和专业ID，预选中对应选项
    if (options.collegeId) {
      const collegeId = parseInt(options.collegeId);
      console.log('接收到学院ID:', collegeId);
      this.setData({
        'formData.collegeId': collegeId
      });
    } else {
      console.warn('未接收到学院ID');
    }
    
    if (options.majorId) {
      const majorId = parseInt(options.majorId);
      console.log('接收到专业ID:', majorId);
      this.setData({
        'formData.majorId': majorId
      });
    } else {
      console.warn('未接收到专业ID');
    }
    
    // 获取学院列表
    this.fetchColleges();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 检查用户是否登录
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      // 如果用户已登录，自动填充部分信息
      this.setData({
        'formData.name': userInfo.name || '',
        'formData.gender': userInfo.gender || '男',
        'formData.phone': userInfo.phone || ''
      });
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  /**
   * 获取学院列表
   */
  fetchColleges() {
    wx.showLoading({
      title: '加载中...',
    });
    
    console.log('开始获取学院列表...');
    http.get('/api/enrollment/colleges')
      .then(res => {
        console.log('获取学院列表响应:', res);
        const colleges = res.data || [];
        console.log('学院列表数据:', colleges);
        this.setData({ colleges });
        
        // 如果有预选的学院ID，设置对应的索引
        if (this.data.formData.collegeId) {
          const index = colleges.findIndex(item => item.id === this.data.formData.collegeId);
          if (index >= 0) {
            this.setData({ collegeIndex: index });
            this.fetchMajors(this.data.formData.collegeId);
          }
        }
      })
      .catch(error => {
        console.error('获取学院列表失败:', error);
      })
      .finally(() => {
        wx.hideLoading();
      });
  },
  
  /**
   * 根据学院ID获取专业列表
   */
  fetchMajors(collegeId) {
    if (!collegeId) {
      console.error('获取专业列表失败: 学院ID为空');
      return;
    }
    
    wx.showLoading({
      title: '加载中...',
    });
    
    console.log('开始获取专业列表, 学院ID:', collegeId);
    http.get(`/api/enrollment/college/${collegeId}/majors`)
      .then(res => {
        console.log('获取专业列表响应:', res);
        
        // 检查返回数据格式
        if (!res || !res.data) {
          console.error('获取专业列表失败: 返回数据格式错误', res);
          wx.showToast({
            title: '获取专业列表失败，请重试',
            icon: 'none'
          });
          return;
        }
        
        const majors = res.data || [];
        console.log('专业列表数据:', majors);
        
        if (majors.length === 0) {
          console.warn('该学院没有专业数据');
          wx.showToast({
            title: '该学院暂无专业数据',
            icon: 'none'
          });
        }
        
        this.setData({ majors });
        
        // 如果有预选的专业ID，设置对应的索引
        if (this.data.formData.majorId) {
          const index = majors.findIndex(item => item.id === this.data.formData.majorId);
          if (index >= 0) {
            this.setData({ majorIndex: index });
            console.log('已预选专业, majorIndex:', index, 'majorId:', this.data.formData.majorId);
          } else {
            console.warn('预选的专业ID在返回的专业列表中未找到', this.data.formData.majorId);
          }
        }
      })
      .catch(error => {
        console.error('获取专业列表失败:', error);
        wx.showToast({
          title: '获取专业列表失败，请重试',
          icon: 'none'
        });
      })
      .finally(() => {
        wx.hideLoading();
      });
  },
  
  /**
   * 性别选择变更
   */
  genderChange(e) {
    this.setData({
      'formData.gender': e.detail.value
    });
  },
  
  /**
   * 地区选择变更
   */
  regionChange(e) {
    this.setData({
      'formData.region': e.detail.value
    });
  },
  
  /**
   * 学历类型选择变更
   */
  educationChange(e) {
    const index = e.detail.value;
    this.setData({
      educationIndex: index,
      'formData.education': this.data.educationTypes[index]
    });
  },
  
  /**
   * 毕业年份选择变更
   */
  graduationYearChange(e) {
    this.setData({
      'formData.graduationYear': e.detail.value
    });
  },
  
  /**
   * 学院选择变更
   */
  collegeChange(e) {
    console.log('collegeChange 触发, event:', e);
    const index = parseInt(e.detail.value);
    console.log('选择的学院索引:', index);
    
    // 检查索引是否有效且colleges数组中存在该索引
    if (isNaN(index) || index < 0 || !this.data.colleges || index >= this.data.colleges.length) {
      console.error('无效的学院索引:', index, '学院列表:', this.data.colleges);
      wx.showToast({
        title: '选择学院失败，请重试',
        icon: 'none'
      });
      return;
    }
    
    const college = this.data.colleges[index];
    console.log('选择的学院对象:', college);
    
    if (!college || !college.id) {
      console.error('无效的学院对象:', college);
      wx.showToast({
        title: '选择学院失败，请重试',
        icon: 'none'
      });
      return;
    }
    
    const collegeId = college.id;
    console.log('选择的学院ID:', collegeId);
    
    this.setData({
      collegeIndex: index,
      'formData.collegeId': collegeId,
      majorIndex: -1,
      'formData.majorId': null,
      majors: []
    });
    
    // 获取该学院的专业列表
    this.fetchMajors(collegeId);
  },
  
  /**
   * 专业选择变更
   */
  majorChange(e) {
    console.log('majorChange 触发, event:', e);
    const index = parseInt(e.detail.value);
    console.log('选择的专业索引:', index);
    
    // 检查索引是否有效且majors数组中存在该索引
    if (isNaN(index) || index < 0 || !this.data.majors || index >= this.data.majors.length) {
      console.error('无效的专业索引:', index, '专业列表:', this.data.majors);
      wx.showToast({
        title: '选择专业失败，请重试',
        icon: 'none'
      });
      return;
    }
    
    const major = this.data.majors[index];
    console.log('选择的专业对象:', major);
    
    if (!major || !major.id) {
      console.error('无效的专业对象:', major);
      wx.showToast({
        title: '选择专业失败，请重试',
        icon: 'none'
      });
      return;
    }
    
    this.setData({
      majorIndex: index,
      'formData.majorId': major.id
    });
    
    console.log('设置专业成功, majorIndex:', index, 'majorId:', major.id);
  },
  
  /**
   * 隐私政策同意状态变更
   */
  privacyChange(e) {
    this.setData({
      'formData.privacyAgreed': e.detail.value.includes('agree')
    });
  },
  
  /**
   * 显示隐私政策
   */
  showPrivacyPolicy() {
    wx.navigateTo({
      url: '/pages/common/privacy-policy'
    });
  },
  
  /**
   * 表单提交
   */
  submitForm(e) {
    // 获取表单数据
    const formValues = e.detail.value;
    const formData = {
      ...this.data.formData,
      ...formValues
    };
    
    console.log('提交的表单数据:', formData);
    
    // 表单验证
    if (!this.validateForm(formData)) {
      return;
    }
    
    // 提交表单数据
    this.submitApplication(formData);
  },
  
  /**
   * 表单验证
   */
  validateForm(formData) {
    const errors = {};
    
    // 验证必填字段
    if (!formData.name.trim()) {
      errors.name = '请输入姓名';
    }
    
    if (!formData.idCard.trim()) {
      errors.idCard = '请输入身份证号';
    } else if (!/^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/.test(formData.idCard)) {
      errors.idCard = '身份证号格式不正确';
    }
    
    if (!formData.phone.trim()) {
      errors.phone = '请输入手机号';
    } else if (!/^1[3-9]\d{9}$/.test(formData.phone)) {
      errors.phone = '手机号格式不正确';
    }
    
    if (formData.email && !/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(formData.email)) {
      errors.email = '邮箱格式不正确';
    }
    
    if (!formData.school.trim()) {
      errors.school = '请输入毕业学校';
    }
    
    if (!formData.collegeId) {
      errors.collegeId = '请选择报考学院';
    }
    
    if (!formData.majorId) {
      errors.majorId = '请选择报考专业';
    }
    
    if (!formData.privacyAgreed) {
      errors.privacy = '请阅读并同意隐私政策';
    }
    
    console.log('表单验证错误:', errors);
    
    // 如果有错误，显示第一个错误
    if (Object.keys(errors).length > 0) {
      const firstError = Object.values(errors)[0];
      wx.showToast({
        title: firstError,
        icon: 'none'
      });
      
      this.setData({ errors });
      return false;
    }
    
    return true;
  },
  
  /**
   * 提交报名申请
   */
  submitApplication(formData) {
    wx.showLoading({
      title: '提交中...',
    });
    
    // 构建提交的数据
    const applicationData = {
      name: formData.name,
      gender: formData.gender,
      idCard: formData.idCard,
      phone: formData.phone,
      email: formData.email || null,
      province: formData.region[0],
      city: formData.region[1],
      district: formData.region[2],
      school: formData.school,
      education: formData.education,
      graduationYear: formData.graduationYear,
      collegeId: formData.collegeId,
      majorId: formData.majorId,
      remark: formData.remark || null
    };
    
    console.log('提交的申请数据:', applicationData);
    
    http.post('/api/enrollment/apply', applicationData)
      .then(res => {
        console.log('提交申请成功:', res);
        // 提交成功，显示成功弹窗
        this.setData({ showSuccessModal: true });
      })
      .catch(error => {
        console.error('提交申请失败:', error);
      })
      .finally(() => {
        wx.hideLoading();
      });
  },
  
  /**
   * 关闭成功弹窗并返回首页
   */
  closeSuccessModal() {
    this.setData({ showSuccessModal: false });
    wx.switchTab({
      url: '/pages/index/index'
    });
  }
})